home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
workbench
/
dir
/
dux5
/
dux5.c
< prev
next >
Wrap
C/C++ Source or Header
|
1987-04-13
|
61KB
|
2,121 lines
#include <exec/types.h>
#include <exec/memory.h>
#include <intuition/intuition.h>
#include <graphics/gfxbase.h>
#include <libraries/dosextens.h>
#define ESC 0x1b
#define FBSIZE (long)(sizeof (struct FileInfoBlock))
#define MAXFILE 100
#define MAXFNAME 9
#define MAXCHAR 30
#define MAXCD 255
#define SLIDE_GADGET 0
#define DSLIDE_GADGET 1
#define ERR_GADGET 2
#define EXECUTE_GADGET 3
#define CURDIR_GADGET 4
#define CPDIR_GADGET 5
#define DF0_GADGET 6
#define DF1_GADGET 7
#define DF2_GADGET 8
#define RAM_GADGET 9
#define ALL_GADGET 10
#define DH0_GADGET 11
#define DH1_GADGET 12
#define DH2_GADGET 13
#define SWAP_GADGET 14
#define CLEAR_GADGET 15
#define DELETE_GADGET 16
#define EDIT_GADGET 17
#define FORMAT_GADGET 18
#define DSKCPY_GADGET 19
#define COPYALL_GADGET 20
#define DELDIR_GADGET 21
#define GETDIR_GADGET 22
#define MAKEDIR_GADGET 23
#define PARENT_GADGET 24
#define ROOT_GADGET 25
#define TYPE_GADGET 26
#define HTYPE_GADGET 27
#define PRINT_GADGET 28
#define EXEC_GADGET 29
#define RUN_GADGET 30
#define COPY_GADGET 31
#define MOVDEL_GADGET 32
#define RENAME_GADGET 33
#define GRENAM_GADGET 34
#define MOVE_GADGET 35
#define SINFO_GADGET 36
#define DINFO_GADGET 37
#define ARC_GADGET 38
#define DEARC_GADGET 39
#define ARCLIST_GADGET 40
#define ALLWIND_GADGET 41
#define CLRWIND_GADGET 42
#define ALLDIRS_GADGET 43
#define CLRDIRS_GADGET 44
#define CPYDIRS_GADGET 45
#define DELDIRS_GADGET 46
#define BYTE_GADGET 47
#define FILENOTE_GADGET 48
#define SCRIPT_GADGET 49
#define SHOW_GADGET 50
#define BUT_FIRST DF0_GADGET
#define FIRST_GADGET But_gad[SHOW_GADGET-6]
#define KILL_E But_gad[EDIT_GADGET-6]
#define KILL_SHOW But_gad[SHOW_GADGET-6]
#define KILL_ARC But_gad[ARC_GADGET-6]
#define KILL_DEARC But_gad[DEARC_GADGET-6]
#define KILL_ARCLIST But_gad[ARCLIST_GADGET-6]
#define KILL_COPYALL But_gad[COPYALL_GADGET-6]
#define KILL_RUN But_gad[RUN_GADGET-6]
#define KILL_EXECUTE But_gad[EXECUTE_GADGET-6]
#define KILL_FORMAT But_gad[FORMAT_GADGET-6]
#define KILL_DSKCPY But_gad[DSKCPY_GADGET-6]
#define KILL_SCRIPT But_gad[SCRIPT_GADGET-6]
#define KILL_CPYDIRS But_gad[CPYDIRS_GADGET-6]
#define KILL_DELDIRS But_gad[DELDIRS_GADGET-6]
#define BUT_LAST SHOW_GADGET
#define WinIDCMP CLOSEWINDOW | REFRESHWINDOW | GADGETUP | MOUSEBUTTONS | SELECTDOWN
#define WinIDCMPM CLOSEWINDOW | REFRESHWINDOW | GADGETUP | MOUSEBUTTONS | MOUSEMOVE | SELECTDOWN
#define GADFLAGS NULL,5,174,53,6,GADGHCOMP|GADGHBOX,GADGIMMEDIATE|RELVERIFY,BOOLGADGET,NULL,NULL,NULL,NULL,NULL
#define GADTEXT 3,2,JAM2,0,0,NULL
extern struct FileHandle *Open();
extern APTR AllocMem();
struct IntuitionBase *IntuitionBase;
struct GfxBase *GfxBase;
struct IntuiMessage *message;
struct RastPort *rp;
struct Window *w;
BOOL MOUSEYES=TRUE;
BOOL MOUSENO=FALSE;
char ASTR[30];
int DFfirst=1;
char *CR = "\n\n";
int status = 0;
char *EP,*CDP,*SHOWP,*ARCP,*COPYP,*RUNP,*DISKCOPYP,*FORMATP,*EXECUTEP,
*PLAYERP, *DELETEP, *ENDCLIP;
char *RSHOW = "ram:DUC/Show";
char *RRUN = "ram:DUC/Run";
char *RDISKCOPY = "ram:DUC/Diskcopy";
char *RFORMAT = "ram:DUC/Format";
char *REXECUTE = "ram:DUC/Execute";
char *DE = "sys:c/E";
char *DARC = "sys:c/Arc";
char *DSHOW = "sys:c/Show";
char *DCOPY = "sys:c/Copy";
char *DRUN = "sys:c/Run";
char *DDISKCOPY = "sys:system/Diskcopy";
char *DCD = "sys:c/Cd";
char *DFORMAT = "sys:system/Format";
char *DEXECUTE = "sys:c/Execute";
char *DPLAYER = "sys:c/Player";
char *DDELETE = "sys:c/Delete";
char *DENDCLI = "sys:c/EndCLI";
int gadgid; /*ID Code identifying which gadget*/
/*Error Gadget string gadget*/
USHORT str_pairs2[] = { 0,0, 639,0, 639,9, 0,9, 0,0,};
struct Border str_border2 =
{
-1,-1,/*Leftedge, Topedge*/
1,1,JAM1,/*FrontPen, BackPen, Drawmode*/
5, /*Number of Pairs*/
(APTR) &str_pairs2, /*XY, Pointer to XY pairs*/
NULL,
};
/*Error display*/
char err_buf[MAXCD+1];
struct StringInfo err_str =
{ &err_buf, NULL, 0, MAXCD+1, 0, 0, 0, 0, 2,0, NULL, 0, NULL, };
struct Gadget Err_gad =
{
NULL, /*last in the list of gadgets*/
30,1,
561,9,
GADGHCOMP, GADGIMMEDIATE | RELVERIFY | STRINGCENTER,
STRGADGET,
(APTR) &str_border2,
NULL,
NULL, /*Intuitext pointer*/
0,&err_str,
ERR_GADGET,
NULL,
};
/*Source Destination string gadgets*/
USHORT str_pairs[] = { 0,0, 280,0, 280,9, 0,9, 0,0,};
struct Border CUR_str_border =
{
-1,-1,/*Leftedge, Topedge*/
3,1,JAM1,/*FrontPen, BackPen, Drawmode*/
5, /*Number of Pairs*/
(APTR) &str_pairs, /*XY, Pointer to XY pairs*/
NULL,
};
struct Border CP_str_border =
{
-1,-1,/*Leftedge, Topedge*/
1,1,JAM1,/*FrontPen, BackPen, Drawmode*/
5, /*Number of Pairs*/
(APTR) &str_pairs, /*XY, Pointer to XY pairs*/
NULL,
};
struct Border str_border =
{
-1,-1,/*Leftedge, Topedge*/
1,1,JAM1,/*FrontPen, BackPen, Drawmode*/
5, /*Number of Pairs*/
(APTR) &str_pairs, /*XY, Pointer to XY pairs*/
NULL,
};
/* Execute String Gadget */
struct IntuiText Exe_text = {1,0,JAM1,283,0,NULL,"E",NULL,};
char Exe_buf[MAXCD+1];
struct StringInfo Exe_str =
{ &Exe_buf, NULL, 0, MAXCD+1, 0, 0, 0, 0, 2,0, NULL, 0, NULL, };
struct Gadget Exe_gad =
{
&Err_gad,
345,141,
281,9,
GADGHCOMP, GADGIMMEDIATE | RELVERIFY,
STRGADGET,
(APTR) &str_border,
NULL,
&Exe_text,
0,
&Exe_str,
EXECUTE_GADGET,
NULL,
};
struct IntuiText Curdir_text = {3,0,JAM1,283,0,NULL," ",NULL,};
char cd_buf[MAXCD+1];
struct StringInfo Curdir_str =
{ &cd_buf, NULL, 0, MAXCD+1, 0, 0, 0, 0, 2,0, NULL, 0, NULL, };
struct Gadget Curdir_gad =
{
&Exe_gad,
345,151,
278,9,
GADGHCOMP, GADGIMMEDIATE | RELVERIFY,
STRGADGET,
(APTR) &CUR_str_border,
NULL,
&Curdir_text,
0,
&Curdir_str,
CURDIR_GADGET,
NULL,
};
/*Destination definitions*/
char cp_buf[MAXCD+1];
struct IntuiText Cpdir_text = {1,0,JAM1,283,0,NULL," ",NULL,};
struct StringInfo Cpdir_str =
{ &cp_buf, NULL, 0, MAXCD+1, 0, 0, 0, 0, 2,0, NULL, 0, NULL, };
struct Gadget Cpdir_gad =
{
&Curdir_gad,
345,161,
278,9,
GADGHCOMP, GADGIMMEDIATE | RELVERIFY,
STRGADGET,
(APTR) &CP_str_border,
NULL,
&Cpdir_text,
0,
&Cpdir_str,
CPDIR_GADGET,
NULL,
};
struct Gadget *CD;
/*File Select Gadget Declarations*/
struct Image Dslide_img;
struct PropInfo Dslide_prop;
struct Gadget DSlide_gad =
{
&Cpdir_gad, /*Next gadget*/
322,95, /*Left, Top edge*/
20,75, /*Width Height*/
GADGHNONE, /*Flags*/
GADGIMMEDIATE | RELVERIFY | FOLLOWMOUSE,
PROPGADGET, /*Gadget type*/
(APTR)&Dslide_img, /*Border definition*/
NULL, /*Select render*/
NULL, /*Gadget text*/
0, /*MutualExclude*/
(APTR) &Dslide_prop, /*Special Info - proportional specification*/
DSLIDE_GADGET,
NULL,
};
struct Gadget *SL;
/*File Select Gadget Declarations*/
struct Image slide_img;
struct PropInfo slide_prop;
struct Gadget Slide_gad =
{
&DSlide_gad, /*Next gadget*/
322,12, /*Left, Top edge*/
20,75, /*Width Height*/
GADGHNONE, /*Flags*/
GADGIMMEDIATE | RELVERIFY | FOLLOWMOUSE,
PROPGADGET, /*Gadget type*/
(APTR)&slide_img, /*Border definition*/
NULL, /*Select render*/
NULL, /*Gadget text*/
0, /*MutualExclude*/
(APTR) &slide_prop, /*Special Info - proportional specification*/
SLIDE_GADGET,
NULL,
};
/*Button Gadget IDs*/
struct IntuiText But_text[] =
{
GADTEXT," DF0: ",NULL,
GADTEXT," DF1: ",NULL,
GADTEXT," DF2: ",NULL,
GADTEXT," RAM: ",NULL,
GADTEXT," ALL ",NULL,
GADTEXT," DH0: ",NULL,
GADTEXT," DH1: ",NULL,
GADTEXT," DH2: ",NULL,
GADTEXT," SWAP ",NULL,
GADTEXT," CLEAR ",NULL,
GADTEXT,"DELETE ",NULL,
GADTEXT," EDIT ",NULL,
GADTEXT,"FORMAT ",NULL,
GADTEXT,"DSKCPY ",NULL,
GADTEXT,"COPYALL",NULL,
GADTEXT,"DELDIR ",NULL,
GADTEXT,"GETDIR ",NULL,
GADTEXT," MKDIR ",NULL,
GADTEXT,"PARENT ",NULL,
GADTEXT," ROOT ",NULL,
GADTEXT," TYPE ",NULL,
GADTEXT," HTYPE ",NULL,
GADTEXT," PRINT ",NULL,
GADTEXT," EXEC ",NULL,
GADTEXT," RUN ",NULL,
GADTEXT," COPY ",NULL,
GADTEXT,"MOVDEL ",NULL,
GADTEXT,"RENAME ",NULL,
GADTEXT,"GRENAM ",NULL,
GADTEXT," MOVE ",NULL,
GADTEXT," SINFO ",NULL,
GADTEXT," DINFO ",NULL,
GADTEXT," ARC ",NULL,
GADTEXT,"DE-ARC ",NULL,
GADTEXT,"A-LIST ",NULL,
GADTEXT,"ALLWIND",NULL,
GADTEXT,"CLRWIND",NULL,
GADTEXT,"ALLDIRS",NULL,
GADTEXT,"CLRDIRS",NULL,
GADTEXT,"CPYDIRS",NULL,
GADTEXT,"DELDIRS",NULL,
GADTEXT," BYTE ",NULL,
GADTEXT,"FILNOTE",NULL,
GADTEXT,"SCRIPT ",NULL,
GADTEXT," SHOW ",NULL,
};
struct Gadget But_gad[] =
{
GADFLAGS,DF0_GADGET,NULL,
GADFLAGS,DF1_GADGET,NULL,
GADFLAGS,DF2_GADGET,NULL,
GADFLAGS,RAM_GADGET,NULL,
GADFLAGS,ALL_GADGET,NULL,
GADFLAGS,DH0_GADGET,NULL,
GADFLAGS,DH1_GADGET,NULL,
GADFLAGS,DH2_GADGET,NULL,
GADFLAGS,SWAP_GADGET,NULL,
GADFLAGS,CLEAR_GADGET,NULL,
GADFLAGS,DELETE_GADGET,NULL,
GADFLAGS,EDIT_GADGET,NULL,
GADFLAGS,FORMAT_GADGET,NULL,
GADFLAGS,DSKCPY_GADGET,NULL,
GADFLAGS,COPYALL_GADGET,NULL,
GADFLAGS,DELDIR_GADGET,NULL,
GADFLAGS,GETDIR_GADGET,NULL,
GADFLAGS,MAKEDIR_GADGET,NULL,
GADFLAGS,PARENT_GADGET,NULL,
GADFLAGS,ROOT_GADGET,NULL,
GADFLAGS,TYPE_GADGET,NULL,
GADFLAGS,HTYPE_GADGET,NULL,
GADFLAGS,PRINT_GADGET,NULL,
GADFLAGS,EXEC_GADGET,NULL,
GADFLAGS,RUN_GADGET,NULL,
GADFLAGS,COPY_GADGET,NULL,
GADFLAGS,MOVDEL_GADGET,NULL,
GADFLAGS,RENAME_GADGET,NULL,
GADFLAGS,GRENAM_GADGET,NULL,
GADFLAGS,MOVE_GADGET,NULL,
GADFLAGS,SINFO_GADGET,NULL,
GADFLAGS,DINFO_GADGET,NULL,
GADFLAGS,ARC_GADGET,NULL,
GADFLAGS,DEARC_GADGET,NULL,
GADFLAGS,ARCLIST_GADGET,NULL,
GADFLAGS,ALLWIND_GADGET,NULL,
GADFLAGS,CLRWIND_GADGET,NULL,
GADFLAGS,ALLDIRS_GADGET,NULL,
GADFLAGS,CLRDIRS_GADGET,NULL,
GADFLAGS,CPYDIRS_GADGET,NULL,
GADFLAGS,DELDIRS_GADGET,NULL,
GADFLAGS,BYTE_GADGET,NULL,
GADFLAGS,FILENOTE_GADGET,NULL,
GADFLAGS,SCRIPT_GADGET,NULL,
GADFLAGS,SHOW_GADGET,NULL,
};
/*BORDER DEFINITION FOR SOURCE FILE SELECT AREA*/
USHORT Fil_pairs[] = { 10,13, 321,13, 321,87, 10,87, 10,13,};
struct Border Fil_border =
{
-1,-1, /*Leftedge, Topedge*/
1,0,JAM1, /*FrontPen, BackPen, Drawmode*/
5, /*Number of Pairs*/
(APTR) Fil_pairs, /*XY, Pointer to XY pairs*/
NULL, /*More borders*/
};
/*BORDER DEFINITION FOR DESTINATION FILE SELECT AREA*/
USHORT DFil_pairs[] = { 10,96, 321,96, 321,170, 10,170, 10,96,};
struct Border DFil_border =
{
-1,-1, /*Leftedge, Topedge*/
1,0,JAM1, /*FrontPen, BackPen, Drawmode*/
5, /*Number of Pairs*/
(APTR) DFil_pairs, /*XY, Pointer to XY pairs*/
NULL, /*More borders*/
};
struct NewWindow nw =
{
0,0,
640,172,
0,1, /*Detail, block pens*/
WinIDCMP, /*IDCMP flags*/
WINDOWSIZING | WINDOWDEPTH | WINDOWDRAG | REPORTMOUSE | WINDOWCLOSE
| ACTIVATE | RMBTRAP | SMART_REFRESH,
&FIRST_GADGET, /*First gadget in the list*/
NULL, /*User checkmark*/
" DirUtil X VERSION 5.00 ",
NULL,
NULL, /*Pointer to superbitmap*/
100,40,640,172, /*Now sizeable*/
WBENCHSCREEN,
};
/*The following structure is used to hold the SOURCE directory entries*/
struct DT
{
char dt_fname[MAXCHAR];/*File name*/
short dt_select; /*Select flag*/
short dt_dir; /*Directory flag*/
long dt_size; /*File size*/
};
struct DT SDT[MAXFILE+1];
struct DT DDT[MAXFILE+1];
struct DT *CDT, *CDTT;
struct DT *CDT1;
struct InfoData *InfoData;
struct FileLock *InitialCurrentDirLock, *CurrentDirLock, *SHOWLOCK,
*ARCLOCK, *ELOCK,*DISKCOPYLOCK,*COPYLOCK,*CDLOCK,*RUNLOCK,
*FORMATLOCK,*EXECUTELOCK,*PLAYERLOCK,*SCRIPTLOCK,
*LIBLOCK,*LIBCLOCK,*RAMLOCK,*LOCK, *RAMCLOCK,*ASSIGNLOCK,
*ENDCLILOCK, *DELETELOCK, *fl;
struct FileLock *RDISKCOPYLOCK, *RRUNLOCK,*RFORMATLOCK,*REXECUTELOCK,
*RASSIGNLOCK, *RSHOWLOCK;
struct FileHandle *window = NULL; /*file handle for type & print*/
struct FileHandle *workfp = NULL; /*file handle to file to be displayed*/
long bytes;
ULONG MessageClass;
USHORT code;
int Sfiles,Dfiles;
int ac;
int Snumdir,Dnumdir;
int Scur_index,Dcur_index;
int *numdir,file,pmode;
int lenn = 1;
char *cpdbuf;
char *ptr5;
int files;
int *cur_index;
int NILFD = 0;
int linecount;
unsigned int index;
int err,done = FALSE,DEL = 1,wind_start, dirflag;
char cpdir[MAXCD+1];
char curdir[MAXCD+1],requestedsd[MAXCD+1],requesteddd[MAXCD+1];
char command[300];
char *DIR;
char *requestedcd;
unsigned char buffer[80];
unsigned char buf[512];
unsigned char blank[37] = " ";
void Print_to_printer(), copy(), new_dir(),
sel_file(), par_dir(), Print_to_screen(), Hprint_to_screen(),
MyOpen(), DoHex(), MyDone(), WaitSpace(), DoHeader(), MyClose();
struct FileLock *oldlock;
main(argc,argv)
char *argv[];
{
struct Gadget *gad_ptr;
struct IntuiText *text_ptr;
register i;
ac = argc;
EP = DE;
SHOWP = RSHOW;
ARCP = DARC;
COPYP = DCOPY;
RUNP = RRUN;
DISKCOPYP = RDISKCOPY;
FORMATP = RFORMAT;
EXECUTEP = REXECUTE;
CDP = DCD;
PLAYERP = DPLAYER;
DELETEP = DDELETE;
ENDCLIP = DENDCLI;
SHOWLOCK = Lock(DSHOW,ACCESS_READ); /* Check to see if they exist */
ARCLOCK = Lock(DARC,ACCESS_READ);
ELOCK = Lock(DE,ACCESS_READ);
CDLOCK = Lock(DCD,ACCESS_READ);
COPYLOCK = Lock(DCOPY,ACCESS_READ);
RUNLOCK = Lock(DRUN,ACCESS_READ);
DISKCOPYLOCK = Lock(DDISKCOPY,ACCESS_READ);
FORMATLOCK = Lock(DFORMAT,ACCESS_READ);
EXECUTELOCK = Lock(DEXECUTE,ACCESS_READ);
PLAYERLOCK = Lock(DPLAYER,ACCESS_READ);
DELETELOCK = Lock(DDELETE,ACCESS_READ);
ENDCLILOCK = Lock(DENDCLI,ACCESS_READ);
RAMCLOCK = Lock("ram:DUC",ACCESS_READ);
LIBLOCK = Lock("ram:libs",ACCESS_READ);
LIBCLOCK = Lock("sys:libs/icon.library",ACCESS_READ);
ASSIGNLOCK = Lock("sys:c/Assign",ACCESS_READ);
if(!EXECUTELOCK) {
puts("Execute COMMAND MUST BE IN SYS c\n");
close_things();
exit();
}
if(!ASSIGNLOCK) {
puts("Assign COMMAND MUST BE IN SYS c\n");
close_things();
exit();
}
if(RAMCLOCK) {UnLock(RAMCLOCK);}
else
if (!(RAMCLOCK = CreateDir("ram:DUC",ACCESS_READ))) { }
else UnLock(RAMCLOCK);
if((DISKCOPYLOCK)&&(ASSIGNLOCK)&&(RUNLOCK)&&(LIBCLOCK))
{
if(LIBLOCK) {UnLock(LIBLOCK);}
else
if (!(LIBLOCK = CreateDir("ram:libs",ACCESS_READ))) { }
else UnLock(LIBLOCK);
if(DISKCOPYLOCK){
copy("sys:system/Diskcopy","ram:DUC");
DISKCOPYP = RDISKCOPY;
}
if(LIBCLOCK){
copy ("sys:libs/icon.library", "ram:libs");
sprintf(command, "%s","Assign libs: ram:libs");
Execute(command,0,0);
}
if(RUNLOCK){
copy ("sys:c/Run","ram:DUC");
RUNP = RRUN;
}
if(ASSIGNLOCK){
copy ("sys:c/Assign", "ram:DUC");
}
}
if(FORMATLOCK){
copy("sys:system/Format","ram:DUC");
FORMATP = RFORMAT;
}
if(SHOWLOCK){
copy("sys:c/Show","ram:DUC");
SHOWP = RSHOW;
}
/*create cariage return file */
file = creat("ram:CRT",pmode);
status = write(file,CR,lenn);
status = write(file,CR,lenn);
status = close(file);
*cp_buf = 0;
*cd_buf = 0;
strcpy(curdir,"sys:");
strcpy(cpdir,"ram:");
strcpy(requestedsd,curdir);
strcpy(requesteddd,cpdir);
if(!(CurrentDirLock = Lock(curdir,ACCESS_READ))) {
if (ac == 2) puts("Could not lock DF0: disk!\n");
close_things(); exit();
}
InitialCurrentDirLock = CurrentDir(CurrentDirLock);
/*Gadget initialization*/
slide_prop.Flags = FREEVERT | AUTOKNOB;
slide_prop.VertBody = 0;
slide_prop.VertPot = 0x8000;
/*Gadget initialization*/
Dslide_prop.Flags = FREEVERT | AUTOKNOB;
Dslide_prop.VertBody = 0;
Dslide_prop.VertPot = 0x8000;
/*Setup the button gadgets*/
for (i=0;i<(BUT_LAST-BUT_FIRST)+1;i++) {
gad_ptr = &But_gad[i];
text_ptr = &But_text[i];
gad_ptr->LeftEdge = ((i%5) * 58) + 347;
gad_ptr->TopEdge = ((i/5) * 11) + 12;
if(i)
gad_ptr->NextGadget = &But_gad[i-1];
else
gad_ptr->NextGadget = &Slide_gad;
gad_ptr->GadgetText = text_ptr;
text_ptr->LeftEdge = 0;
text_ptr->TopEdge = 0;
}
GfxBase = (struct GfxBase *) OpenLibrary("graphics.library",0);
IntuitionBase = (struct IntuitionBase *) OpenLibrary("intuition.library",0);
if (!(w = (struct Window *) OpenWindow(&nw) )) {
if (ac == 2) puts("Could not open window\n");
close_things();
exit();
}
ReportMouse(MOUSENO,&nw);
rp = w->RPort;
DrawBorder(rp,&Fil_border,0,0);
DrawBorder(rp,&DFil_border,0,0);
dirflag = 1;
set_point();
getdir(cpdir);
new_dir();
dirflag = 0;
set_point();
getdir(curdir);
new_dir();
display_error("Status: O.K.",0);
RefreshGadgets(&FIRST_GADGET,w,NULL);
if(!ARCLOCK) OffGadget(&KILL_ARC,w,NULL);
if(!ARCLOCK) OffGadget(&KILL_DEARC,w,NULL);
if(!ARCLOCK) OffGadget(&KILL_ARCLIST,w,NULL);
if(!SHOWLOCK) OffGadget(&KILL_SHOW,w,NULL);
if(!CDLOCK) OffGadget(&KILL_COPYALL,w,NULL);
if(!COPYLOCK) OffGadget(&KILL_COPYALL,w,NULL);
if(!COPYLOCK) OffGadget(&KILL_CPYDIRS,w,NULL);
if(!DELETELOCK) OffGadget(&KILL_DELDIRS,w,NULL);
if(!PLAYERLOCK) OffGadget(&KILL_SCRIPT,w,NULL);
if(!RUNLOCK) OffGadget(&KILL_RUN,w,NULL);
if(!EXECUTELOCK) OffGadget(&KILL_EXECUTE,w,NULL);
if(!DISKCOPYLOCK) OffGadget(&KILL_DSKCPY,w,NULL);
if(!ASSIGNLOCK) OffGadget(&KILL_DSKCPY,w,NULL);
if(!RUNLOCK) OffGadget(&KILL_DSKCPY,w,NULL);
if(!FORMATLOCK) OffGadget(&KILL_FORMAT,w,NULL);
if(!ELOCK) OffGadget(&KILL_E,w,NULL);
ModifyIDCMP(w,WinIDCMP);
for (;;) {
WaitPort(w->UserPort);
message = (struct IntuiMessage *) GetMsg(w->UserPort);
MessageClass = message->Class;
code = message->Code;
ReplyMsg(message);
switch (MessageClass) {
case GADGETDOWN:
display_error("Status: O.K.",0);
do_gadgets(message,w);
break;
case REFRESHWINDOW:
BeginRefresh(w); EndRefresh(w);
dis_files(*cur_index);
DrawBorder(rp,&Fil_border,0,0);
DrawBorder(rp,&DFil_border,0,0);
break;
case CLOSEWINDOW:
close_things(); exit();
break;
case MOUSEBUTTONS:
if (code == SELECTDOWN) {sel_file();
DEL = 1;
display_error("Status: O.K.",0);}
break;
case MOUSEMOVE:
case GADGETUP:
break;
default:
break;
} /*end switch*/
} /*end for*/
}
Info2(ddir)
char *ddir;
{
InfoData = AllocMem(sizeof(struct InfoData),0);
fl = Lock(ddir,ACCESS_READ);
Info(fl,InfoData);
sprintf(command,"%d Usable Bytes Free",((InfoData->id_NumBlocks - InfoData->id_NumBlocksUsed - 2) <= 0) ? 0 : ((InfoData->id_NumBlocks - InfoData->id_NumBlocksUsed - 2) * InfoData->id_BytesPerBlock));
display_error(command,0);
FreeMem(InfoData,sizeof(struct InfoData));
UnLock(fl);
}
do_gadgets(mes,win)
struct IntuiMessage *mes;
struct Window *win;
{
struct FileLock *MakeDirLock;
struct Gadget *igad;
unsigned short i;
int jj;
igad = (struct Gadget *) mes->IAddress;
if((DFfirst==0)&&(gadgid!=FORMAT_GADGET)&&
(gadgid!=DSKCPY_GADGET)){DFfirst =1;
display_error("Status: O.K.",0);
if(ASSIGNLOCK){
sprintf(command, "%s","Assign c: sys:c");
Execute(command,0,0);}
}
gadgid = igad->GadgetID;
if((DEL==0) && (DELETE_GADGET != gadgid) && (DELDIR_GADGET != gadgid)
&& (DELDIRS_GADGET != gadgid))
{DEL = 1;
display_error("Status: O.K.",0);}
switch (gadgid) {
case CURDIR_GADGET:
dirflag = 0;
set_point();
ModifyIDCMP(w,0);
nullterm(cd_buf,MAXCD);
Curdir_str.NumChars = strlen(cd_buf);
Curdir_str.BufferPos = strlen(cd_buf);
getdir(cd_buf);
new_dir();
ModifyIDCMP(w,WinIDCMP);
break;
case CPDIR_GADGET:
dirflag = 1;
set_point();
ModifyIDCMP(w,0);
nullterm(cp_buf,MAXCD);
Cpdir_str.NumChars = strlen(cp_buf);
Cpdir_str.BufferPos = strlen(cp_buf);
getdir(cp_buf);
new_dir();
ModifyIDCMP(w,WinIDCMP);
break;
case EXECUTE_GADGET:
nullterm(Exe_buf,MAXCD);
Exe_str.NumChars = strlen(Exe_buf);
Exe_str.BufferPos = strlen(Exe_buf);
break;
case SLIDE_GADGET:
ModifyIDCMP(w,WinIDCMPM);
if((message->MouseY>=95)&&(message->MouseY<=170)) gadgid = DSLIDE_GADGET;
else{
dirflag = 0;
set_point();
jj=11;
do{
do{
ReportMouse(MOUSEYES,&nw);
WaitPort(w->UserPort);
message = (struct IntuiMessage *) GetMsg(w->UserPort);
MessageClass = message->Class;
ReplyMsg(message);
jj=jj+1;
}while((jj<=10)&&(MessageClass!=GADGETUP));
jj=0;
ReportMouse(MOUSENO,&nw);
rdis_files();
}
while(MessageClass!=GADGETUP);
do{
ModifyIDCMP(w,WinIDCMP);
if((message = (struct IntuiMessage *) GetMsg(w->UserPort)))ReplyMsg(message);
}while (message);
break;
}
case DSLIDE_GADGET:
ModifyIDCMP(w,WinIDCMPM);
dirflag = 1;
set_point();
jj=11;
do{
do{
ReportMouse(MOUSEYES,&nw);
WaitPort(w->UserPort);
message = (struct IntuiMessage *) GetMsg(w->UserPort);
MessageClass = message->Class;
ReplyMsg(message);
jj=jj+1;
}while((jj<=10)&&(MessageClass!=GADGETUP));
jj=0;
ReportMouse(MOUSENO,&nw);
rdis_files();
}
while(MessageClass!=GADGETUP);
do{
ModifyIDCMP(w,WinIDCMPM);
if((message = (struct IntuiMessage *) GetMsg(w->UserPort)))ReplyMsg(message);
}while (message);
break;
case ROOT_GADGET:
par_dir(gadgid);
break;
case PARENT_GADGET:
par_dir(gadgid);
break;
case FORMAT_GADGET: {
if(DFfirst == 1){ DFfirst=0;
display_error("****CLICK AGAIN TO FORMAT****",0);
if(ASSIGNLOCK){
sprintf(command, "%s","Assign c: ram:DUC");
Execute(command,0,0);
}
break;
}else{DFfirst=1;
sprintf(command,"%s %s %s %s %s",FORMATP,"DRIVE",cpdbuf,"NAME",Exe_buf);
Execute(command,0,0);
display_error("***** NO ERROR - FORMAT COMPLETE *****",0);
}}
break;
case DSKCPY_GADGET: {
if(DFfirst == 1){ DFfirst=0;
display_error("****CLICK AGAIN TO DISKCOPY****",0);
if(ASSIGNLOCK){
sprintf(command, "%s","Assign c: ram:DUC");
Execute(command,0,0);
}
break;
}else{
nullterm(cd_buf,MAXCD);
nullterm(cp_buf,MAXCD);
if(dirflag == 0)
sprintf(command,"%s %s %s %s %s",DISKCOPYP,"<ram:CRT",cd_buf,"TO",cp_buf);
else
sprintf(command,"%s %s %s %s %s",DISKCOPYP,"<ram:CRT",cp_buf,"TO",cd_buf);
Execute(command,0,0);
DFfirst = 1;
display_error("***** DISK COPY COMPLETE *****",0);
}}
break;
case SCRIPT_GADGET:
case SHOW_GADGET:
case ARCLIST_GADGET:
case FILENOTE_GADGET:
case ARC_GADGET:
case DEARC_GADGET:
case COPY_GADGET:
case RENAME_GADGET:
case TYPE_GADGET:
case HTYPE_GADGET:
case PRINT_GADGET:
case EXEC_GADGET:
case RUN_GADGET:
case MOVE_GADGET:
case MOVDEL_GADGET:
case GRENAM_GADGET:
case COPYALL_GADGET:
case CPYDIRS_GADGET:
action_on_selected(gadgid);
break;
case DELETE_GADGET:
if(DEL == 1){ DEL=0;
display_error("****CLICK AGAIN TO DELETE****",0);
break;
}else{ action_on_selected(gadgid);
break;}
case DELDIRS_GADGET:
if(DEL == 1){ DEL=0;
display_error("****CLICK AGAIN TO DELETE****",0);
break;
}else{ action_on_selected(gadgid);
break;}
case DELDIR_GADGET:
if(DEL == 1){ DEL=0;
display_error("****CLICK AGAIN TO DELETE****",0);
break;
}else{ action_on_selected(gadgid);}
break;
case SWAP_GADGET:
if(dirflag==1) dirflag = 0;
else dirflag = 1;
set_point();
RefreshGadgets(CD,w,NULL);
break;
case DINFO_GADGET:
if(dirflag==1)Info2(cd_buf);
else Info2(cp_buf);
break;
case SINFO_GADGET:
if(dirflag==0)Info2(cd_buf);
else Info2(cp_buf);
break;
case BYTE_GADGET:
bytes = 0;
files = 0;
CDTT=CDT;
for (i=0;i<*numdir;i++){
if ((CDTT->dt_select == 1) && (!(CDTT->dt_dir))) {
bytes = bytes + CDTT->dt_size;
files++;};
CDTT=CDTT+1;
}
sprintf(command,"%d Bytes in %d Files",bytes,files);
display_error(command,0);
break;
case MAKEDIR_GADGET:
if(MakeDirLock = Lock(cpdbuf,ACCESS_READ)) {
UnLock(MakeDirLock);
display_error("Directory or File Already Exists " ,IoErr());
break;
}
if (!(MakeDirLock = CreateDir(cpdbuf))) {
display_error("CreateDir Failed ",IoErr());
break;
};
UnLock(MakeDirLock);
getdir(DIR);
new_dir(); break;
case DF0_GADGET:
getdir("df0:"); new_dir(); break;
case DF1_GADGET:
getdir("df1:"); new_dir(); break;
case DF2_GADGET:
getdir("df2:"); new_dir(); break;
case DH0_GADGET:
getdir("dH0:"); new_dir(); break;
case DH1_GADGET:
getdir("dH1:"); new_dir(); break;
case DH2_GADGET:
getdir("dH2:"); new_dir(); break;
case RAM_GADGET:
getdir("ram:"); new_dir(); break;
case EDIT_GADGET:
display_error("Now Editing Selected File",0);
action_on_selected(gadgid);
display_error("Status: O.K.",0);
break;
case GETDIR_GADGET:
getdir(requestedcd);
new_dir();
break;
case ALLWIND_GADGET:
CDTT = CDT;
CDTT = CDTT + *cur_index;
for (i=0;i<MAXFNAME;i++){
if(!CDTT->dt_dir) CDTT->dt_select = 1;
CDTT = CDTT +1;
}
dis_files(*cur_index);
break;
case CLRWIND_GADGET:
CDTT=CDT;
CDTT = CDTT + *cur_index;
for (i=0;i<MAXFNAME;i++){
CDTT->dt_select = 0;
CDTT = CDTT +1;
}
dis_files(*cur_index);
break;
case CLRDIRS_GADGET:
CDTT=CDT;
for (i=0;i<*numdir;i++){
if(CDTT->dt_dir) CDTT->dt_select = 0;
CDTT = CDTT +1;
}
dis_files(*cur_index);
break;
case ALLDIRS_GADGET:
CDTT=CDT;
for (i=0;i<*numdir;i++){
if(CDTT->dt_dir) CDTT->dt_select = 1;
CDTT = CDTT +1;
}
dis_files(*cur_index);
break;
case CLEAR_GADGET:
CDTT=CDT;
for (i=0;i<*numdir;i++){
CDTT->dt_select = 0;
CDTT = CDTT +1;
}
dis_files(*cur_index);
break;
case ALL_GADGET:
CDTT=CDT;
for (i=0;i<*numdir;i++){
if (!CDTT->dt_dir) CDTT->dt_select = 1;
CDTT=CDTT+1;
}
dis_files(*cur_index);
break;
default:
break;
}
}
getdir_dest()
{
if(dirflag == 1) dirflag = 0;
else dirflag =1;
set_point();
getdir(DIR);
new_dir();
if(dirflag == 1) dirflag = 0;
else dirflag =1;
set_point();
}
new_dir_dest()
{
register i1;
struct DT *SDTT,*tt_DDTT,*DDTT,*t_DDTT;
int *Snum,*Dnum;
int temp,found,num;
SDTT=CDT;
Snum =numdir;
if(dirflag == 0)
{DDTT = &DDT[0];
Dnum = &Dnumdir;
SDTT = &SDT[0];
}else{DDTT = &SDT[0];
Dnum = &Snumdir;
SDTT = &DDT[0];
}
temp = *Dnum;
t_DDTT = DDTT;
t_DDTT = t_DDTT + *Dnum;
for(i1=0;i1<*Snum;i1++)
{
/* move file to destination directory*/
/*add entry to destination directory */
/* sort directory and return to source directory*/
if(SDTT->dt_select == 2)
{
num=0;
found = 1;
tt_DDTT = DDTT;
do{
found = strcmp(tt_DDTT->dt_fname ,SDTT->dt_fname);
tt_DDTT = tt_DDTT +1;
num = num+1;
}
while((num <= *Dnum) && (found !=0));
if(found!=0){
strcpy(t_DDTT->dt_fname,SDTT->dt_fname);
t_DDTT->dt_select = 0;
t_DDTT->dt_dir = SDTT->dt_dir;
t_DDTT->dt_size = SDTT->dt_size;
nullterm(t_DDTT->dt_fname,MAXCHAR);
t_DDTT = t_DDTT +1;
temp++;
}
else{
tt_DDTT = tt_DDTT -1;
tt_DDTT->dt_select = 0;
tt_DDTT->dt_size = SDTT->dt_size;
tt_DDTT->dt_dir = SDTT->dt_dir;
}
}
SDTT = SDTT + 1;
}/*end of for*/
if(*Dnum != temp) qsort(DDTT,temp,(sizeof(struct DT)));
*Dnum = temp;
if(dirflag==1)dirflag=0;
else dirflag = 1;
set_point();
new_dir();
if(dirflag==1)dirflag=0;
else dirflag = 1;
set_point();
}/* end of routine*/
getdir(DirToGet)
char *DirToGet;
{
struct FileLock *filelock;
struct FileInfoBlock *fb;
char EffectiveDir[MAXCD+1];
if (!(*DirToGet)) strcpy(EffectiveDir,":");
else strcpy(EffectiveDir,DirToGet);
set_point();
/*If we cant open requested dir, don't change*/
TRYAGAIN:
if (!(filelock = Lock(EffectiveDir,ACCESS_READ))) {
strcpy(EffectiveDir,DIR);
display_error("Can't Lock Requested Directory ",IoErr());
if(!(filelock = Lock(EffectiveDir,ACCESS_READ))) {
display_error("Can't Lock Current Dir. Switching to Ram: ",IoErr());
strcpy(EffectiveDir,"ram:");
goto TRYAGAIN;
}
}
/*Allocate the file info block*/
fb = AllocMem(FBSIZE,MEMF_CLEAR | MEMF_PUBLIC);
if (!Examine(filelock,fb)) {
FreeMem(fb,FBSIZE);
UnLock(filelock);
display_error("Can't Read Info Block. Switching to Ram: ",IoErr());
strcpy(EffectiveDir,"ram:");
goto TRYAGAIN;
}
if(fb->fib_DirEntryType < 0) { /*ITS A FILE- NOT A DIRECTORY*/
strcpy(EffectiveDir,DIR);/*Forget request, use current*/
FreeMem(fb,FBSIZE);
UnLock(filelock);
display_error("Directory Requested was Regular File - No Changes ",IoErr());
goto TRYAGAIN;
}
/*Copy directory string into gadget structure*/
strcpy(cpdbuf,EffectiveDir);
Cpdir_str.NumChars = strlen(EffectiveDir);
Cpdir_str.BufferPos = strlen(EffectiveDir);
strcpy(DIR,EffectiveDir);
strcpy(requestedcd,EffectiveDir);
RefreshGadgets(CD,w,NULL);
*numdir = 0;
*cur_index = 0;
/*Loop through each of the files in this directory*/
while (ExNext(filelock,fb)) {
if (fb->fib_DirEntryType < 0) CDT->dt_dir = 0;
else CDT->dt_dir = -1;
CDT->dt_select = 0;
CDT->dt_size = fb->fib_Size;
strcpy(CDT->dt_fname,fb->fib_FileName);
nullterm(CDT->dt_fname,MAXCHAR);
CDT = CDT +1;
if (++*numdir == MAXFILE) break;
}
set_point();
qsort(CDT,*numdir,(sizeof (struct DT)));
FreeMem(fb,FBSIZE);
UnLock(CurrentDirLock); /*Release old CD lock */
UnLock(filelock); /*Release new request lock*/
CurrentDirLock = Lock(EffectiveDir);
CurrentDir(CurrentDirLock); /*MAKE IT THE CURRENT DIRECTORY*/
}
rdis_files()
{
USHORT Vpot;
int numd;
int pos;
if (*numdir > MAXFNAME) {
if (dirflag == 0)
Vpot = slide_prop.VertPot;
else
Vpot = Dslide_prop.VertPot;
Vpot >>= 1;
Vpot &= 0x7fff;
numd = *numdir - MAXFNAME;
pos = ((float) Vpot / (float) 0x7fff) * numd;
*cur_index = pos;
dis_files(pos);
}
}
void new_dir()
{
USHORT Vbody;
if (*numdir <= MAXFNAME)
Vbody = 0xffff;
else {
Vbody = ((float) 0x7fff)/(((float) *numdir)/((float) MAXFNAME));
Vbody <<= 1;
}
*cur_index = 0;
if (dirflag == 0)
ModifyProp(SL,w,NULL,slide_prop.Flags,0,0,0,Vbody);
else
ModifyProp(SL,w,NULL,Dslide_prop.Flags,0,0,0,Vbody);
dis_files(0);
return;
}
set_point()
{
if (dirflag == 0){
CDT=&SDT[0];
SL = &Slide_gad;
CD = &Curdir_gad;
wind_start = 14;
numdir = &Snumdir;
cur_index = &Scur_index;
DIR = curdir;
requestedcd = requestedsd;
cpdbuf = cd_buf;
CUR_str_border.FrontPen = 3;
CP_str_border.FrontPen = 1;
}
else{
CDT=&DDT[0];
SL = &DSlide_gad;
CD = &Cpdir_gad;
wind_start = 96;
numdir = &Dnumdir;
cur_index = &Dcur_index;
DIR = cpdir;
requestedcd = requesteddd;
cpdbuf = cp_buf;
CUR_str_border.FrontPen = 1;
CP_str_border.FrontPen = 3;
};
RefreshGadgets(&Curdir_gad,w,NULL);
RefreshGadgets(&Cpdir_gad,w,NULL);
}
dis_files(pos)
int pos;
{
register i;
for (i=0;i<MAXFNAME;i++) dis_name(i+pos,i);
}
dis_name(file,pos)
register file,pos;
{
static char file_name[MAXCHAR+8];
static struct IntuiText file_text = {2,0,JAM2,15,13,NULL,(UBYTE *)file_name,NULL };
/*Set the top position*/
file_text.TopEdge = (pos*8)+wind_start;
if (file == -1 || file >= *numdir) {
sprintf(file_name,"%-38.38s","");
file_text.FrontPen = 2;
file_text.BackPen = 2; /*black*/
} else {
CDTT=CDT;
CDTT = CDTT+file;
if (CDTT->dt_dir) {
sprintf(file_name,"%-30.30s%-8.8s",CDTT->dt_fname,"");
if (CDTT->dt_select) {
file_text.FrontPen = 2; /*Black on Orange*/
file_text.BackPen = 3;
} else {
file_text.FrontPen = 3; /*Orange on Black*/
file_text.BackPen = 2;
}
} else {
sprintf(file_name,"%-30.30s %7ld",CDTT->dt_fname,
CDTT->dt_size);
if (CDTT->dt_select) {
file_text.FrontPen = 2; /*Black on White*/
file_text.BackPen = 1;
} else {
file_text.FrontPen = 1; /*White on Black*/
file_text.BackPen = 2;
}
}
}
/*Display the text*/
PrintIText(rp,&file_text,0,0);
}
void sel_file()
{
int file;
char *ptr;
struct DT *temp_CDT;
struct DT *temp_CDT1;
if((dirflag==0)&&(message->MouseY > (wind_start + (MAXFNAME*8)))) dirflag = 1;
else if((dirflag==1)&&(message->MouseY < wind_start)) dirflag = 0;
set_point();
temp_CDT=CDT;
temp_CDT1=CDT;
if (message->MouseX < 12 || message->MouseX > 318 || message->MouseY < wind_start || message->MouseY >= (MAXFNAME*8+wind_start))
return;
file = message->MouseY - wind_start;
file /= 8;
if((!*numdir) || (file > MAXFNAME) || ((file+*cur_index) > *numdir))
return;
temp_CDT = temp_CDT+file+*cur_index ;
if (temp_CDT->dt_dir) {
temp_CDT1 = CDT;
ptr = DIR +strlen(DIR) - 1;
if(temp_CDT->dt_select ^= 1)
sprintf(requestedcd,"%s%s%s",DIR,((*ptr == ':') ? "":"/"),
temp_CDT->dt_fname);
else
strcpy(requestedcd,DIR);
dis_files(*cur_index);
return;
}
temp_CDT->dt_select ^= 1;
dis_name(file+ *cur_index,file);
}
action_on_selected(gadgid)
int gadgid;
{
struct IntuiMessage *message;
struct DT *temp_CDT, *sptr, *dptr;
struct DT *CDTI;
register i, i1, temp;
char filename[MAXCD+MAXCHAR+2],dfilename[MAXCD+MAXCHAR+2];
char *ptr,*ptr1;
/*At each iteration, check for any IntuiMessages that would signal
user wants to halt operation: GADGETUP(he hit a gadget) or
MOUSEBUTTONS(button press on something we dont recognize)*/
ModifyIDCMP(w,MOUSEBUTTONS);
CDT1 = CDT;
for (i=0;i<*numdir;i++) {
if((gadgid != SHOW_GADGET) && (message = (struct IntuiMessage *) GetMsg(w->UserPort))) {
ReplyMsg(message);
MessageClass = message->Class;
if(MessageClass==MOUSEBUTTONS){
display_error("OPERATION ABORTED",0);
break;}
}
if((CDT1->dt_select) || (gadgid == COPYALL_GADGET)){
ptr = DIR + strlen(DIR) - 1;
if(dirflag==0)ptr1 = cpdir + strlen(cpdir)-1;
else ptr1 = curdir + strlen(curdir)-1;
if (*ptr == ':')
sprintf(filename,"%s%s",DIR,CDT1->dt_fname);
else
sprintf(filename,"%s/%s",DIR,CDT1->dt_fname);
/* get destination file name*/
if(dirflag==0)
if (*ptr1 == ':')
sprintf(dfilename,"%s%s",cpdir,CDT1->dt_fname);
else
sprintf(dfilename,"%s/%s",cpdir,CDT1->dt_fname);
else
if (*ptr1 == ':')
sprintf(dfilename,"%s%s",curdir,CDT1->dt_fname);
else
sprintf(dfilename,"%s/%s",curdir,CDT1->dt_fname);
switch (gadgid) {
case MOVDEL_GADGET:
if(dirflag ==0) copy(filename,cp_buf);
else copy(filename,cd_buf);
if(LOCK=Lock(dfilename,ACCESS_READ)){
if(CDT1->dt_dir) {
display_error("File is a Directory",0);
break;
}
if(!(DeleteFile(filename)))
display_error("Could Not Delete Requested File ",IoErr());
else CDT1->dt_select = 2;
UnLock(LOCK);}
break;
case DSKCPY_GADGET:
case DELETE_GADGET:
if(CDT1->dt_dir) {
display_error("File is a Directory",0);
DEL = 1;
break;
}
if(!(DeleteFile(filename)))
display_error("Could Not Delete Requested File ",IoErr());
else CDT1->dt_select = 2;
DEL = 1;
break;
case DELDIR_GADGET:
if(!CDT1->dt_dir) {
display_error("File is not a Directory",0);
DEL = 1;
break;
}
if(!(DeleteFile(filename)))
display_error("Could not Delete Requested Directory ",IoErr());
else CDT1->dt_select = 2;
DEL = 1;
break;
case COPY_GADGET:
if(dirflag == 0)copy(filename,cp_buf);
else copy(filename,cd_buf);
CDT1->dt_select = 2;
break;
case SHOW_GADGET:
if(SHOWLOCK) {
display_error("Now Showing Selected Pictures",0);
sprintf(command,"%s %s",SHOWP,filename);
Execute(command,0,0);
}
break;
case SCRIPT_GADGET:
if(PLAYERLOCK) {
display_error("Now Playing Selected Scripts",0);
sprintf(command,"%s %s",PLAYERP,filename);
Execute(command,0,0);
display_error("Status: O.K.",0);
}
break;
case DEARC_GADGET:
if(ARCLOCK) {
display_error("Extracting Files From Archive",0);
if(dirflag == 0)
sprintf(command,"%s %s %s %s",ARCP,"x",filename,cp_buf);
else
sprintf(command,"%s %s %s %s",ARCP,"x",filename,cd_buf);
Execute(command,0,0);
display_error("Status: O.K.",0);
}
break;
case COPYALL_GADGET:
display_error("COPYING ALL FILES TO DESTINATON",0);
if(dirflag == 0)
sprintf(command,"%s %s %s %s",COPYP,cd_buf,"ALL TO",cp_buf);
else
sprintf(command,"%s %s %s %s",COPYP,cp_buf,"ALL TO",cd_buf);
Execute(command,0,0);
display_error("Status: O.K.",0);
break;
case CPYDIRS_GADGET:
if(CDT1->dt_dir) {
display_error("COPYING DIRECTORIES TO DESTINATON",0);
if(LOCK = Lock(dfilename,ACCESS_READ)) UnLock(LOCK);
else
if (!(LOCK = CreateDir(dfilename,ACCESS_READ))) {
display_error("ERROR COPYING TO DESTINATION DIRECTORY",0);
CDT1->dt_select = 0;
}
else {UnLock(LOCK);
if(dirflag == 0)
sprintf(command,"%s %s %s %s",COPYP,filename,"ALL TO",dfilename);
else
sprintf(command,"%s %s %s %s",COPYP,filename,"ALL TO",dfilename);
Execute(command,0,0);
display_error("Status: O.K.",0);
CDT1->dt_select = 2;
}}break;
case DELDIRS_GADGET:
if(CDT1->dt_dir) {
display_error("DELETEING REQUESTED DIRECTORIES",0);
if(dirflag == 0)
sprintf(command,"%s %s %s",DELETEP,filename,"ALL");
else
sprintf(command,"%s %s %s",DELETEP,filename,"ALL");
Execute(command,0,0);
DEL = 1;
display_error("Status: O.K.",0);
CDT1->dt_select = 2;
}break;
case ARC_GADGET:
if(ARCLOCK) {
CDTI = CDT;
display_error("Adding Files To Destination Archive",0);
for (i=1;i<=*numdir;i++){ /* Loop All Selected Files Together */
if ((CDTI->dt_select == 1) && (!(CDTI->dt_dir))){
CDTI->dt_select=0;
if (*ptr == ':')
sprintf(filename,"%s %s%s",filename,DIR,CDTI->dt_fname);
else
sprintf(filename,"%s %s/%s",filename,DIR,CDTI->dt_fname);
} CDTI = CDTI + 1;
}
if(dirflag ==0)
sprintf(command,"%s %s %s %s",ARCP,"a",cp_buf,filename);
else
sprintf(command,"%s %s %s %s",ARCP,"a",cd_buf,filename);
Execute(command,0,0);
display_error("Status: O.K.",0);
}
break;
case ARCLIST_GADGET:
if(ARCLOCK) {
display_error("Reading Files in Selected Arc File",0);
sprintf(command,"%s %s %s",ARCP,"v",filename);
Execute(command,0,0);
display_error("Status: O.K.",0);
}
break;
case EXEC_GADGET:
sprintf(command,"%s %s %s %s",EXECUTEP,"> NIL:",filename,Exe_buf);
Execute(command,0,0);
break;
case RUN_GADGET:
sprintf(command,"%s %s %s %s",RUNP,"> NIL:",filename,Exe_buf);
Execute(command,0,0);
break;
case TYPE_GADGET:
if(!CDT1->dt_dir) Print_to_screen(filename);
break;
case HTYPE_GADGET:
if(!CDT1->dt_dir) Hprint_to_screen(filename);
break;
case PRINT_GADGET:
if(!CDT1->dt_dir) Print_to_printer(filename);
break;
case MOVE_GADGET:
if(dirflag == 0){
ptr = cp_buf + strlen(cp_buf)-1;
if (*ptr == ':')
sprintf(command,"%s%s",cp_buf,CDT1->dt_fname);
else
sprintf(command,"%s/%s",cp_buf,CDT1->dt_fname);
}else{
ptr = cd_buf + strlen(cd_buf)-1;
if (*ptr == ':')
sprintf(command,"%s%s",cd_buf,CDT1->dt_fname);
else
sprintf(command,"%s/%s",cd_buf,CDT1->dt_fname);
}
if(!(Rename(filename,command)))
display_error("Cannot Rename to Requested Path ",IoErr());
else CDT1->dt_select = 2;
break;
case GRENAM_GADGET:
CONV_FILE_NAME();
if(err == 1)
display_error("file name size error ",0);
else
if(!(Rename(filename,cpdbuf)))
display_error("Cannot Rename to Requested Path ",IoErr());
else {
strcpy(CDT1->dt_fname,ASTR);
}
break;
case FILENOTE_GADGET:
if (!(SetComment(filename,Exe_buf))) {
display_error("Comment Failed on file",IoErr());
};
break;
case RENAME_GADGET:
if(!(Rename(filename,cpdbuf)))
display_error("Cannot Rename to Requested Path ",IoErr());
else {
ptr = cpdbuf + strlen(DIR);
if(*ptr=='/') ptr = ptr+1;
strcpy(CDT1->dt_fname,ptr);
}
break;
case EDIT_GADGET:
if(!CDT1->dt_dir) {
sprintf(command, "%s %s",EP,filename);
Execute(command,0,NILFD);
}
break;
default:
break;
} /*switch*/
if ((gadgid != DELDIR_GADGET)
&& (gadgid != DELETE_GADGET)
&& (gadgid != DELDIRS_GADGET)
&& (gadgid != COPY_GADGET)
&& (gadgid != CPYDIRS_GADGET)
&& (gadgid != MOVE_GADGET)
&& (gadgid != MOVDEL_GADGET)) CDT1->dt_select = 0;
if(RENAME_GADGET == gadgid) break; /*RENAME FIRST FILE ONLY!*/
if(COPYALL_GADGET == gadgid)break;/*not based on seleect*/
if(FILENOTE_GADGET == gadgid)break;
} /*if selected*/
CDT1 = CDT1 +1;
} /*for all*/
if((MOVDEL_GADGET == gadgid) ||
(MOVE_GADGET == gadgid) ||
(COPY_GADGET == gadgid) ||
(CPYDIRS_GADGET == gadgid)) new_dir_dest();
if((ARC_GADGET == gadgid) ||
(DEARC_GADGET == gadgid)||
(COPYALL_GADGET == gadgid)){
getdir_dest();
if(DEARC_GADGET==gadgid){
status = strcmp(cpdir,curdir);
if(status==0)
if(dirflag==0)getdir(curdir);
else getdir(cpdir);
}
}else {
temp = *numdir;
temp_CDT=CDT;
for (i1=0;i1<*numdir;i1++){
if((gadgid == COPY_GADGET)||
(gadgid==CPYDIRS_GADGET))temp_CDT->dt_select = 0;
if (temp_CDT->dt_select == 2) {
strcpy(temp_CDT->dt_fname,"\xff\xff\xff");
temp_CDT->dt_select = 0;
temp--;
};
temp_CDT = temp_CDT +1;
}
if ((*numdir != temp) ||
(RENAME_GADGET == gadgid) ||
(GRENAM_GADGET == gadgid)) qsort(CDT,*numdir,(sizeof (struct DT)));
*numdir = temp;
};
ptr5 = cpdbuf + strlen(cpdbuf)-1;
if((gadgid==RENAME_GADGET) || (gadgid ==GRENAM_GADGET)){
for (;ptr5 >= cpdbuf;ptr5--) {
if (*ptr5 == ':') {
*(ptr5+1) = 0;
break;
}
if (*ptr5 == '/') {
*ptr5 = 0;
break;
}
}
}
*Exe_buf =0;
if ((RENAME_GADGET == gadgid) ||
(GRENAM_GADGET == gadgid)){
status = strcmp(cpdir,curdir);
if(status==0){
if(dirflag==0){sptr = &SDT[0];
dptr = &DDT[0];
}else{sptr = &DDT[0];
dptr = &SDT[0];}
for (i1=0;i1<*numdir;i1++){
strcpy(dptr->dt_fname,sptr->dt_fname);
dptr=dptr+1;
sptr=sptr+1;
}
}
if(dirflag==1)dirflag=0;
else dirflag = 1;
set_point();
new_dir();
if(dirflag==1)dirflag=0;
else dirflag = 1;
set_point();
}
new_dir();
ModifyIDCMP(w,WinIDCMP);
}
void par_dir(gadgid) /*Parent and Root*/
int gadgid; {
char *ptr; /*With this, we may change curdir*/
ModifyIDCMP(w,0);
ptr = DIR + strlen(DIR)-1;
if((PARENT_GADGET == gadgid) ||(GRENAM_GADGET == gadgid))
for (;ptr >= DIR;ptr--) {
if (*ptr == ':') {
*(ptr+1) = 0;
break;
}
if (*ptr == '/') {
*ptr = 0;
break;
}
}
else /*Gadget was root. Scan back to :*/
for (;ptr >= DIR;ptr--){
if (*ptr == ':') {
*(ptr+1) = 0;
break;
}
}
getdir(DIR);
new_dir();
ModifyIDCMP(w,WinIDCMP);
return;
}
CONV_FILE_NAME()
{
int toksiz,ser_key_size,MAX,LENCS,count,LENT,LENS;
char *PEX,*AST;/*append string*/
char rep_str[30],ser_str[30];
int act,len_mat;
int LENSS,LENRS,LENPRE,LENSUF,LENC;
char *ptr3,*ptr4,*dirptr,*ptr,*ptr1,*ptr2;
err = 0;
ptr4 = &ptr3;
toksiz = 1;
LENT = 2;
ser_key_size = 2;
PEX = Exe_buf+2;
dirptr = DIR + strlen(DIR)-1;
nullterm(CDT1->dt_fname,MAXCD);
LENS = strlen(CDT1->dt_fname); /*length of name on source string*/
MAX=29;
AST = ASTR;
ptr=Exe_buf+strlen(Exe_buf)-1;
ptr2=Exe_buf,ptr1=Exe_buf;
/*find comand strings*/
for (;ptr >= Exe_buf;ptr--){
if(*ptr == '>') ptr2=ptr;
}
nullterm(Exe_buf,MAXCD);
LENCS = strlen(Exe_buf)-2;/*lenght of append string*/
LENC = LENCS;
act = strncpy(ASTR,PEX,LENC);/*string to attach*/
count = stcd_i(ASTR,&LENT);
if((*Exe_buf=='+') && (*(Exe_buf+1)==']')){
if(LENCS<=0)err=1;
if ((MAX-(LENCS+LENS))<=0)err=1;
else{
strcat(ASTR,CDT1->dt_fname);
if(*dirptr == ':')
sprintf(cpdbuf,"%s%s",DIR,ASTR);
else
sprintf(cpdbuf,"%s/%s",DIR,ASTR);
}
}
if((*Exe_buf=='+') && (*(Exe_buf+1)=='[')){
if(LENCS<=0)err=1;
if ((MAX-(LENCS+LENS))<=0)err=1;
else{
strcat(CDT1->dt_fname,ASTR);
strcpy(ASTR,CDT1->dt_fname);
if(*dirptr == ':')
sprintf(cpdbuf,"%s%s",DIR,CDT1->dt_fname);
else
sprintf(cpdbuf,"%s/%s",DIR,CDT1->dt_fname);
}
}
if((*Exe_buf=='-') && (*(Exe_buf+1)==']')){
if(count==0) err=1;
else if(LENT <= 0) err=1;
else if (LENT >= LENS) err=3;
else{
ptr = (CDT1->dt_fname) + LENT;
strcpy(ASTR,ptr);
if(*dirptr == ':')
sprintf(cpdbuf,"%s%s",DIR,ptr);
else
sprintf(cpdbuf,"%s/%s",DIR,ptr);
}
}
if((*Exe_buf=='-') && (*(Exe_buf+1)=='[')){
if(count==0) err=1;
else if(LENT <= 0) err=1;
else if (LENT >= LENS) err=3;
else{
ptr = (CDT1->dt_fname) ;
ptr1 = ptr + (LENS-LENT);
*ptr1 = 0;
strcpy(ASTR,ptr);
if(*dirptr == ':')
sprintf(cpdbuf,"%s%s",DIR,ptr);
else
sprintf(cpdbuf,"%s/%s",DIR,ptr);
}
}
if((*Exe_buf=='#') && (*(Exe_buf+1)=='?')){
LENSS = ptr2 - PEX;
LENRS = LENCS - LENSS - 1;
if(LENRS <= 0) err=1;
if(LENSS <= 0) err=1;
if(LENSS >> MAX) err=1;
if(LENRS >> MAX) err=1;
if((LENS - LENSS + LENRS)>>MAX) err=1;
*ptr2 = 0;
strcpy(ser_str,"s+");
strcpy((ser_str + 2),PEX);
strcpy(rep_str,(ptr2 + 1));
len_mat = stcpm((CDT1->dt_fname),PEX,ptr4);
*ptr2 = '>';
if(len_mat == LENSS)
{ LENPRE = ptr3 - (CDT1->dt_fname);
LENSUF = LENS - LENPRE - len_mat;
strcpy(ser_str,(CDT1->dt_fname),LENPRE);
strcpy((ser_str+LENPRE),(ptr2+1),LENRS);
strcpy((ser_str+LENPRE+LENRS),(ptr3+LENSS),LENSUF);
strcpy(ASTR,ser_str);
if(*dirptr == ':')
sprintf(cpdbuf,"%s%s",DIR,ser_str);
else
sprintf(cpdbuf,"%s/%s",DIR,ser_str);
}
} /* end of replace */
} /* end routine */
/*The following function is used to compare two directory entries*/
comp(dt1,dt2)
struct DT *dt1,*dt2;
{
char *ptr1,*ptr2;
register c1,c2;
for (ptr1=dt1->dt_fname,ptr2=dt2->dt_fname;*ptr1 && *ptr2;ptr1++,ptr2++) {
c1 = *ptr1;
c2 = *ptr2;
c1 &= 0xdf;
c2 &= 0xdf;
if (c1 > c2) return (-1);
if (c1 < c2) return (1);
}
if (*ptr1) return (-1);
return (0);
}
void copy(s,pc)
char *s;
char *pc;
{
struct FileHandle *copyin;
struct FileHandle *copyout;
int iosize;
int actual;
char *copybuf;
struct FileLock *fl;
char *ptr;
char *ptr1;
if (!(copyin = Open(s,MODE_OLDFILE)))
return;
if (!*pc) {
display_error("No Destination Path Given",0);
return;
}
if ((fl = Lock(pc,ACCESS_READ))) {
UnLock(fl);
ptr = strlen(pc) + pc - 1;
for (ptr1=s+strlen(s)-1;ptr1 > s;ptr1--) {
if (*ptr1 == '/' || *ptr1 == ':')
break;
}
if (*ptr1 == '/' || *ptr1 == ':')
ptr1++;
if (*ptr == ':')
sprintf(command,"%s%s",pc,ptr1);
else
sprintf(command,"%s/%s",pc,ptr1);
} else {
display_error("Illegal Destination Path ",IoErr());
Close(copyin);
return;
}
if (!strcmp(command,s)) {
display_error("Cannot Copy File to Itself",0);
Close(copyin);
return;
}
if (!(copyout = Open(command,MODE_NEWFILE))) {
display_error("Cannot Write to Requested Path ",IoErr());
Close(copyin);
return;
} else {
/*Determine the length of the file*/
iosize = Seek(copyin,0,OFFSET_BEGINING);
iosize = 12288;
/*Allocate memory for the copy buffer*/
do {
copybuf = AllocMem(iosize,MEMF_PUBLIC);
if (copybuf == 0)
iosize = iosize/2;
} while (copybuf == 0 & iosize > 512);
/*Copy the file*/
do {
actual = Read(copyin,copybuf,iosize);
if (Write(copyout,copybuf,actual) != actual)
break;
} while (actual == iosize);
/*Free the copy buffer*/
FreeMem(copybuf,iosize);
/*Close the input and output buffers*/
Close(copyout);
Close(copyin);
}
}
nullterm(str,len) /*End a string with a null*/
char *str;
int len;
{
register i;
str[len] = 0;
for (i=len;len >= 0;len--) {
if (str[i] != ' ' && str[i])
break;
str[i] = 0;
}
}
display_error(errormsg,doserrnum)
char *errormsg;
long doserrnum;
{
strcpy(err_buf,errormsg);
if (doserrnum) sprintf(err_buf,"%s (DOS Error %d)",err_buf,doserrnum);
err_str.NumChars = strlen(err_buf);
err_str.BufferPos = strlen(err_buf);
RefreshGadgets(&Err_gad,w,NULL);
}
close_things()
{
if(RSHOWLOCK ) UnLock(RSHOWLOCK);
if(ARCLOCK ) UnLock(ARCLOCK);
if(ELOCK ) UnLock(ELOCK);
if(CDLOCK ) UnLock(CDLOCK);
if(COPYLOCK ) UnLock(COPYLOCK);
if(RRUNLOCK ) UnLock(RRUNLOCK);
if(RDISKCOPYLOCK ) UnLock(RDISKCOPYLOCK);
if(RFORMATLOCK ) UnLock(RFORMATLOCK);
if(REXECUTELOCK ) UnLock(REXECUTELOCK);
if(DELETELOCK ) UnLock(DELETELOCK);
if(PLAYERLOCK ) UnLock(PLAYERLOCK);
if(LIBCLOCK ) {UnLock(LIBCLOCK);
sprintf(command,"%s","Assign libs: sys:libs");
Execute(command,0,0);};
if(ASSIGNLOCK ) {UnLock(ASSIGNLOCK);
sprintf(command,"%s","sys:c/Assign c: sys:c");
Execute(command,0,0);};
sprintf(command,"%s","sys:c/Delete ram:libs all quiet");
Execute(command,0,0);
sprintf(command,"%s","sys:c/Delete ram:DUC all quiet");
Execute(command,0,0);
sprintf(command,"%s","sys:c/Delete ram:CRT");
Execute(command,0,0);
if (w) CloseWindow(w);
if (GfxBase) CloseLibrary(GfxBase);
if (IntuitionBase) CloseLibrary(IntuitionBase);
if (InitialCurrentDirLock) {
CurrentDir(InitialCurrentDirLock);
UnLock(CurrentDirLock);
}
}
qsort( v, n, size)
char *v;
short n;
int size;
{
short gap, i, j;
register x;
char temp, *p1, *p2;
for (gap=n/2;gap > 0; gap /= 2)
for (i=gap; i<n; i++)
for (j = i-gap; j >= 0; j -= gap)
if ( comp((p1=v+j*size), (p2=v+(j+gap)*size)) < 0) {
/*exchange them*/
for (x=0; x<size; x++) {
temp = *p1;
*p1++ = *p2;
*p2++ = temp;
}
}
}
void Print_to_screen(ptr)
char *ptr[];
{
register i, len, len2;
MyOpen(ptr);
DoHeader();
if (!done)
do{
len = Read(workfp,buf,512);
len2 = 0;
while (len2<len && done == FALSE){
for (i=0; buf[len2+i] != 0x0a && i<78 && i+len2<511; i++)
if (buf[len2+i] == 0x0c) buf[len2+i] = 0x20;
Write(window,&buf[len2],i+1);
len2 += i + 1;
if (++linecount > 20 && buf[len2-1] == 0x0a) WaitSpace();
}
}while(len == 512 && done == FALSE);
MyDone();
MyClose();
return;
}
void Print_to_printer(ptr)
char *ptr[];
{
register len;
done = FALSE; /*boolean variables*/
workfp = Open(ptr,MODE_OLDFILE); /*Try to open the file to print*/
if(workfp == NULL) done = TRUE;
else {
window = Open("prt:",MODE_NEWFILE);
if(window == NULL) done = TRUE;
}
if (!done)
do{
len = Read(workfp,buf,512);
Write(window,&buf[0],len);
}while(len == 512);
MyClose();
return;
}
void Hprint_to_screen(ptr)
char *ptr[];
{
register len;
char r1[2];
MyOpen(ptr);
DoHeader();
if (!done)
strcpy(buffer," - ");
r1[0]=0x00;r1[1]=0x00;
do{
index = 0;
DoHex(r1,2);
r1[1] += 16;
if (!(r1[1])) r1[0]++;
index = 6;
len = Read(workfp,buf,16);
buf[len]=0x0a;
DoHex(buf,len,6);
if (len) {
Write(window,&buffer[0],index);
if (len != 16) Write(window,&blank[0],42-index);
Write(window,&buf[0],len+1);
};
if (++linecount > 21) WaitSpace();
}while ((len == 16) && (done == FALSE));
MyDone();
MyClose();
return;
}
void DoHex(ptr2,len)
int len;
char ptr2[];
{
unsigned char c1,c2;
unsigned int i,i2=0;
for (i=0;i<len;i++) {
c1 = ((ptr2[i] & 0xf0) >>4);
c2 = (ptr2[i] & 0x0f);
if (c1 > 9) c1 += 87;
else c1 += 48;
if (c2 > 9) c2 += 87;
else c2 += 48;
buffer[index]=c1;
buffer[index+1]=c2;
if((buf[i] < 32) || (buf[i] > 127)) buf[i]=46;
index += 2;
if (++i2 == 4) {
index++;
i2=0;
};
}
}
void MyOpen(ptr)
char *ptr[];
{
done = FALSE;
linecount = 1;
workfp = Open(ptr,MODE_OLDFILE);
if(workfp == NULL) done = TRUE;
else{
strcpy(command,"raw:0/0/640/200/Listing of: ");
strcat(command,ptr);
window = Open(command,MODE_NEWFILE);
if(window == NULL) done = TRUE;
}
}
void DoHeader()
{
strcpy(command,"\x1b[33m<CR>\x1b[2m advances one line, \x1b[33mSpace Bar\x1b[2m");
Write(window,command,strlen(command));
strcpy(command," advances one page, and \x1b[33mESC\x1b[2m aborts.\n\x1b[0m");
Write(window,command,strlen(command));
}
void WaitSpace()
{
unsigned char c;
linecount = 1;
/*print the messages in color 3*/
strcpy(command,"\x1b[33mPress SPACE for more...\x1b[0m");
Write(window,command,strlen(command));
/*wait for a key*/
while(Read(window,&c,1),c != ' ') {
if (c == ESC){
done = TRUE; /*short circuit*/
break;
}
/*RETURN scrolls by one line*/
else if (c == '\r'){
linecount = 20;
break;
}
}
/*erase the message*/
strcpy(command, "\r \r");
Write(window,command,strlen(command));
}
void MyDone()
{
unsigned char c;
strcpy(command,"\r\x1b[33mEnd of File. Press SPACE\x1b[0m");
Write(window,command,strlen(command));
/*Wait for spacebar to quit*/
while(Read(window,&c,1),c != ' ');
}
void MyClose()
{
if(workfp) Close(workfp);
if(window) Close(window);
}